PHP DAL Testen
Home

PHP DAL Testen

PHP DAL Testen

In deze les testen we de PHP DAL klasse uit. Terzelfdertijd gebruiken we hiervoor de Threepenny (PHP ThreepennyMVC). Als voorbeeld nemen we de EventCategory tabel van het Fric-frac project.

Voorbereiding

  1. Het data/config.ini bestand:
    [local]
    database = "Cursist13"
    username = root
    password = root
    host = 127.0.0.1
    port = 3306
    driver = mysql
    
    [global]
    database = Docent1
    username = Docent1
    password = XXXXXXXXXXX
    host = xxx.xxx.xxx.xxx
    port = 3306
    driver = mysql
    
    
  2. De tabellen maken
    De SQL script vind je in data/sqlscripts/fric-frac-ddl.sql. Vervang de databasename door je eigen databasename.

    Zie Fric-frac MySQL Data Definition Language.

  3. Data inserten
    EventCategory en EventTopic met data vullen: Fric-frac MySQL insert data in EventCategory - EventTopic

  4. index.php
    1. We moeten de volgende nieuwe bestanden insluiten in het index.php bestand:
      1. Controllers/EventCategoryControler.php
      2. vendor/anormapart/Dal.php
      3. vendor/anormapart/Helpers.php
    2. Voeg de juiste url toe in de hamburger link
    3. de volledige pagina:
      <?php
      // var_dump($_SERVER);
      use ThreepennyMVC\FrontController;
      
      include ('../vendor/threepennymvc/FrontController.php');
      include ('../vendor/threepennymvc/Controller.php');
      include ('../vendor/anormapart/Dal.php');
      include ('../vendor/anormapart/Helpers.php');
      include ('Controllers/AdminController.php');
      include ('Controllers/EventCategoryController.php');
      
      $route = FrontController::getRouteData($_SERVER['REQUEST_URI'], 'Fricfrac', 'Admin', 'index');
      $view = FrontController::dispatch($route);
      ?>
      <!DOCTYPE html>
      <html lang="nl">
      <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <link rel="stylesheet" type="text/css" href="/css/app.css">
          <link rel="stylesheet" type="text/css" href="/css/icon-font.css">
          <title>Fric-frac events</title>
      </head>
      <body class="page">
          <header class="page-header">
              <nav class="control-panel">
                  <a href="/Admin/index" class="tile">
                      <span class="icon-menu"></span>
                      <span class="screen-reader-text">Admin index</span>
                  </a>
              </nav>
              <h1 class="banner">Fric-frac</h1>
          </header>
          <?php echo $view(); ?>
          <footer class="page-footer">
              <p>&copy ModernWays 2020</p>
              <p>Opdracht Programmeren 4</p>
          </footer>
      </body>
      </html>
  5. De views aanpassen
    1. De view met de naam Views/EventCategory/Index.php aanpassen. We passen de url aan en tonen de message waarde uit het model:
      <section class="show-room entity">
          <div class="detail">
              <nav class="command-panel">
                  <h2 class="banner">EventCategory</h2>
                  <a href="/EventCategory/InsertingOne" class="tile">
                      <span class="icon-plus"></span>
                      <span class="screen-reader-text">InsertingOne</span>
                  </a>
              </nav>
              <fieldset></fieldset>
              <div class="feedback">
                  <p><?php echo $model['message']; ?></p>            
                  <p><?php echo isset($model['error']) ? $model['error'] : ''; ?></p>
              </div>
          </div>
          <?php include('ReadingAll.php'); ?>
      </section>
    2. De view Views/EventCategory/Index.php gebruikt de Views/EventCategory/ReadingAll.php view. Eerst kijken we of er iets in het list attribuut van de $model array zit. Daar moeten we door het list attribuut van de $model associatieve array lopen om de alle rijen in de EventCategory tabel te tonen:
      <aside class="list">
          <?php
          if ($model['list']) { ?>
              <table>
                  <tr>
                      <th></th>
                      <th>Naam</th>
                  </tr>
                  <?php
                  foreach($model['list'] as $item) {
                  ?>
                      <tr>
                          <td>
                              <a class='tile' 
                                  href="/Event/readingOne/<?php echo $item['Id'];?>">
                                  <span class="icon-arrow-right"></span>
                                  <span class="screen-reader-text">ReadingOne</span></a>
                          </td>
                          <td><?php echo $item['Name'];?></td>
                      </tr>
                  <?php
                  }
                  ?>
              </table>
          <?php
          } else { ?>
              <p>Geen rijen gevonden in EventCategory tabel.</p>
          <?php       
          } ?>
      </aside>
    3. Om de juiste controllermethoden op te roepen moeten we de url's in de Views/Admin/Index.php pagina aanpassen:
      <h1><?php echo $model['title']; ?></h1>
      <article class="index">
          <a class="tile" href="/EventCategory/Index">
              <span aria-hidden="true" class="icon-bookmark"></span>
              <span class="screen-reader-text">Event Category</span>
              Event Category
          </a>
          <a class="tile" href="EventTopic/Index">
              <span aria-hidden="true" class="icon-price-tag"></span>
              <span class="screen-reader-text">Event Topic</span>
              Event Topic</a>
          <a class="tile" href="Event/Index">
              <span aria-hidden="true" class="icon-power"></span>
              <span class="screen-reader-text">Event</span>
              Event Index</a>
          <div class="tile _2x1">Informatieve tegel</div>
      </article>
      
    4. De EventCategory/InsertingOne.php view aanpassen
      Pas het action attribuut van de Insert One knop in het form element aan en het href attribuut van de Annuleren link:
      <section class="show-room entity">
          <form id="form" method="post" action="/EventCategory/createOne" class="detail">
              <nav class="command-panel">
                  <h2 class="banner">EventCategory</h2>
                  <button type="submit" value="insert" name="uc" class='tile'>
                      <span class="icon-floppy-disk"></span>
                      <span class="screen-reader-text">Insert One</span>
                  </button>
                  <a href="/EventCategory/Index" class="tile">
                      <span class="icon-cross"></span>
                      <span class="screen-reader-text">Annuleren</span>
                  </a>
              </nav>
              <fieldset>
                  <div>
                      <label for="Name">Naam</label>
                      <input type="text" required id="Name" name="Name" />
                  </div>
              </fieldset>
              <div class="feedback">
                  <p><?php echo $model['message']; ?></p>
                  <p><?php echo isset($model['error']) ? $model['error'] : ''; ?></p>
              </div>
          </form>
          <?php include('ReadingAll.php'); ?>
      </section>
      

De controllerklasse uitproberen

  1. Een controllerklasse maken om de Dal klasse te testen:
    1. in een bestand met de naam Controllers/EventCategoryController.php:
      <?php
      /**
       * Created by ModernWays
       * User: Jef Inghelbrecht
       * Date: 3/04/2020
       * Time: 13:32
       */
      
      namespace Fricfrac\Controllers;
      
      class EventCategoryController extends \ThreepennyMVC\Controller
      {
        ...
      }   
    2. de index methode
      1. De methode index toevoegen om toegang te krijgen tot de EventCategory tabel. In de view moet rechts een lijst van alle rijen staan. We vullen het model met alle rijen uit de tabel EventCategory. We gebruiken daarvoor de ReadAll static methode de Dal klasse. Ook de melding die de Dal::ReadAll methode gemaakt heeft stoppen we in het model. Die wordt in de Views/EventCategory/Index.php de view gebruikt:
        public function index()
        {
            $model['list'] = \AnOrmApart\Dal::readAll('EventCategory');
            $model['message'] = \AnOrmApart\Dal::getMessage();
            return $this->view($model);
        }
      2. ga via Admin/Index naar de EventCategory/Index of typ in de url http://localhost:63346/EventCategory/Index:
      3. Resultaat:
        EventCategory - Index view
        EventCategory - Index view
    3. Create
      Dat zijn twee use cases. Eerst het formulier InsertingOne tonen en dan indien gewenst een nieuwe rij in de tabel toevoegen.
      1. CreateOne
        De methode createOne toevoegen om 1 rij in de tabel EventCategory toevoegen. Deze retourneert de view die we hierboven gemaakt hebben. Vermits de naam van de view niet overeenkomt met de naam van de methode van de controller moeten we het pad als argument meegeven. Het model bevat hier enkel de feedback van de create methode van de Dal en de naam van de tabel:
        /**
         * Created by ModernWays
         * User: Jef Inghelbrecht
         * Date: 11/04/2019
         * Time: 10:32
         */
        namespace ModernWays\Controllers;
        
        class EventCategoryTestController extends \ModernWays\Controller
        {
            
            public function createOne() {
                $model = array('tableName' => 'EventCategory',
                    'error' => 'Geen');
                $eventCategory = array (
                  "Name" => $_POST['Name'];
                  
                if (\AnOrmApart\Dal::create('EventCategory', $eventCategory, 'Name')) {
                    $model['message'] = "Rij toegevoegd! {$eventCategory['Name']} is toegevoegd aan EventCategory";
                } else {
                    $model['message'] = "Oeps er is iets fout gelopen! Kan {$eventCategory['Name']} niet toevoegen aan EventCategory";
                    $model['error'] = \AnOrmApart\Dal::getMessage();
                }
                return $this->view($model, 'Views/EventCateory/Index.php');
            }
        }
      2. InsertingOne
        De methode die het model vult en de view oproept stopt de waarden, die door de gebruiker in het formulier werden ingetypt, in een array. Die wordt samen met de tabelnaam en de kolomnaam aan de create methode van de Dal klasse doorgegeven. Dan wordt de $model array gevuld voor de EventCategory/Index.php view:
        public function insertingOne()
        {
            $model['list'] = \AnOrmApart\Dal::readAll('EventCategory');
            $model['message'] = \AnOrmApart\Dal::getMessage();
            return $this->view($model);
        }
      3. Uitproberen
        ga via Admin/Index naar de EventCategory/Index of typ in de url http://localhost:63346/EventCategory/InsertingOne:
        EventCategory - InsertingOne view
        EventCategory - InsertingOne view
        Klik op de save knop om de rij te voegen. We keren terug naar de EventCategory/InsertingOne.php view en de we zijn rechts dat de rij is toegevoegd:
        EventCategory - Rij toegevoegd - terug naar Index view
        EventCategory - Rij toegevoegd - terug naar Index view

JI
2020-04-22 10:52:26